package top.fangwenmagician.calculationstring;

import top.fangwenmagician.calculationstring.log.I_CalculationLog;

/**
 * CalculationString的接口，用于规范代码。
 */
public interface I_CalculationString {
    /**
     * 计算表达式
     *
     * @param expression 表达式
     * @return 结果
     * @throws Exception 计算中抛出的异常
     */
    String calculation(String expression) throws Exception;
    /**
     * 计算表达式，并写入计算日志
     *
     * @param expression 表达式
     * @param log        日志对象，需要继承{@link I_CalculationLog}接口
     * @param <T>        需要继承{@link I_CalculationLog}接口
     * @return 结果
     * @throws Exception 计算中抛出的异常
     */
    <T extends I_CalculationLog> String calculation(String expression, T log) throws Exception;
}
